package com.zhuyuan.core.util;


import com.zhuyuan.core.constant.Oauth2Constants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Base64;
import java.util.Map;

/**
 * Jwt工具类
 *
 * @author ruoyi
 */
public class TokenUtils {
    public static String secret = Oauth2Constants.SIGNING_KEY;

    /**
     * 从数据声明生成令牌
     *
     * @param claims 数据声明
     * @return 令牌
     */
    public static String createToken(Map<String, Object> claims) {
        String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
        return token;
    }

    /**
     * 从令牌中获取数据声明
     *
     * @param token 令牌
     * @return 数据声明
     */
    public static Claims parseToken(String token) {
        String key = Base64.getEncoder().encodeToString(secret.getBytes());
        try {
            return Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 获取token串
     *
     * @param auth token
     */
    public static String getToken(String auth) {
        int length = Oauth2Constants.HEADER_TOKEN_KEY.length();
        if ((auth != null) && (auth.length() > length)) {
            String headStr = auth.substring(0, 6);  // .toLowerCase();
            if (headStr.compareTo(Oauth2Constants.AUTHORIZATION_BEARER) == 0) { // bearer
                auth = auth.substring(7);
            }
            return auth;
        }
        return null;
    }

}
